package jmine.tec.hydra.services.alterar;

import jmine.tec.di.annotation.Injected;
import jmine.tec.hydra.domain.senderRegistry.FileSenderRegistry;
import jmine.tec.services.annotations.Execution;
import jmine.tec.services.annotations.Input;
import jmine.tec.services.annotations.Output;
import jmine.tec.services.annotations.ServiceImplementor;
import jmine.tec.services.api.ActionsEnum;
import jmine.tec.services.api.ServiceProperties;
import bancosys.tec.persist.dao.BaseDAO;
import bancosys.tec.persist.dao.BeanNotFoundException;

/**
 * Serviço de alteração de um SenderRegistry que envia mensagens para um arquivo de um diretório.
 * 
 * @author piercio
 */
@ServiceImplementor(action = ActionsEnum.ALTERAR)
public class FileSenderRegistryService {

    public static final String IDENTIFICADOR = "Identificador";

    public static final String MNEMONICO = "Mnemônico";

    public static final String EXTENSION = "Extensão";

    public static final String PATH = "Caminho";

    // Injected
    private BaseDAO<FileSenderRegistry> dao;

    private ServiceProperties serviceProperties;

    // Obrigatórios
    private String mnemonico;

    /**
     * Registra um novo sender para arquivo.
     * 
     * @return FileSenderRegistry
     * @throws BeanNotFoundException caso não encontre o fileSenderRegistry com o mnemonico passado.
     */
    @Execution
    @Output(propertyName = IDENTIFICADOR)
    public FileSenderRegistry execute() throws BeanNotFoundException {
        FileSenderRegistry registry = this.dao.findByNaturalKey(this.mnemonico);
        registry.setExtension(this.serviceProperties.getRaw(EXTENSION));
        registry.setPath(this.serviceProperties.getRaw(PATH));
        registry.getPersister().save();
        return registry;
    }

    /**
     * @param dao the dao to set
     */
    @Injected
    public void setDao(BaseDAO<FileSenderRegistry> dao) {
        this.dao = dao;
    }

    /**
     * @param serviceProperties the serviceProperties to set
     */
    @Injected
    public void setServiceProperties(ServiceProperties serviceProperties) {
        this.serviceProperties = serviceProperties;
    }

    /**
     * @param mnemonico the mnemonico to set
     */
    @Input(fieldName = MNEMONICO)
    public void setMnemonico(String mnemonico) {
        this.mnemonico = mnemonico;
    }

    /**
     * @param extension o valor para a extensão de arquivo de mensagem.
     */
    @Input(fieldName = EXTENSION)
    public void setExtension(String extension) {
    }

    /**
     * @param path o valor para o caminho de gravação do arquivo de mensagem.
     */
    @Input(fieldName = PATH)
    public void setPath(String path) {
    }
}
